package xyz.robinbingo.leetcode.a20.b05.c15;

import java.util.HashMap;

public class Official {
    public int subarraySum(int[] nums, int k) {
        // 记录合适的连续字符串数量
        int count = 0;
        // 记录前面数字相加之和
        int pre = 0;
        // map记录前几个数字之和为K出现相同和的次数为V
        HashMap<Integer, Integer> map = new HashMap<>();
        // 初始化
        map.put(0, 1);
        for (int num : nums) {
            pre += num;
            // 如果前面数字之和加上这个数字正好等于K（存在一个数字加上nums[i]结果为K
            // 说明找到了
            if (map.containsKey(pre - k)) {
                // 累计
                count += map.get(pre - k);
            }
            // 计算新的和放入map
            map.put(pre, map.getOrDefault(pre, 0) + 1);
        }
        return count;
    }
}
